package com.ms.qw.jsf.datamodel;

import com.ms.qw.application.mappers.RacionMapper;
import com.ms.qw.application.mappers.RecetaMapper;
import com.ms.qw.client.dto.RacionDTO;
import com.ms.qw.client.dto.RacionFlt;
import com.ms.qw.client.dto.RecetaDTO;
import com.ms.qw.client.dto.RecetaFlt;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class LazyRacionModel extends LazyDataModel<RacionDTO> {

    RacionMapper racionMapper;
    private RacionFlt racionFlt;
    private List<RacionDTO> raciones = new ArrayList<RacionDTO>();



    public LazyRacionModel(RacionMapper racionMapper, RacionFlt racionFlt) {
        this.racionMapper = racionMapper;
        this.racionFlt = racionFlt;
    }

    private Integer calcularTamanioTotal() {
        Integer numeroNotificaciones = racionMapper.total(racionFlt);
        return numeroNotificaciones < 500 ? numeroNotificaciones:500;
    }

    @Override
    public List<RacionDTO> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {

        Integer totalSize= calcularTamanioTotal();
        int start = first;
        int end = first + pageSize;

        if(end> totalSize){
            end=totalSize;
        }
        racionFlt.setStart(start);
        racionFlt.setEnd(end);
        raciones = racionMapper.find(racionFlt);
        setRowCount(totalSize);
        return raciones;
    }


    @Override
    public RacionDTO getRowData(String rowKey) {
        for(RacionDTO n : raciones) {
            if(n.getCodigo().equals(Integer.valueOf(rowKey)))
                return n;
        }

        return null;
    }

    @Override
    public Object getRowKey(RacionDTO n) {
        return n.getCodigo();
    }

    @Override
    public void setRowIndex(int rowIndex) {
        if (rowIndex == -1 || getPageSize() == 0) {
            super.setRowIndex(-1);
        } else{

            super.setRowIndex(rowIndex % getPageSize());
        }

    }

}
